home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
031-040
/
amok39
/
oberon-forum
/
oca-demo
/
oberonpointer.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
4KB
|
116 lines
(*---------------------------------------------------------------------------
:Program. : OberonPointer.mod
:Author. : Jochen P. Kupfer
:Address. : Buchenweg 22, D-4006 Erkrath 2
:Phone. : (0)2104-40673
:Shortcut. : SIGMA
:Version. : 1.0
:Date. : 31-Mai-90
:Copyright. : © 1989, Vertrieb nur auf der GetiT oder kostenlos!
:Language. : Oberon
:Translator. : Oberon Compiler V0.9 01-Mar-90, sollte auch mit der
:Translator. : Demo-Version 1.0 funktionieren
:Contents. : Demo zur Verwendung von C- und Assembler-Modulen
:Contents. : zusammen mit einem Oberon-Modul.
:Contents. : Zeigt die Anwendung symbolischer Adressen bei
:Contents. : Variablen und Prozeduren.
:Remark. : Start vom CLI: [RUN] OberonPointer <RETURN>
:Remark. : Start von der Wb: Doppelklick auf das Icon.
---------------------------------------------------------------------------*)
MODULE OberonPointer;
(* Oberon Compiler V0.9 01-Mar-90
© 1989 by Fridtjof Siebert. [intern]
*)
IMPORT i : Intuition, (* Abkürzungen *)
g : Graphics,
e : Exec,
d : Dos,
r : Requests,
s : SYSTEM;
TYPE
PDATA = ARRAY 18 OF LONGINT;
VAR
BP["_SpriteData"] : POINTER TO PDATA; (* C-Datas *)
wPtr : i.WindowPtr;
text["_IText1"] : i.IntuiText; (* C-Datas *)
text2["_MText"] : i.IntuiText; (* C-Datas *)
nw["MyWindow"] : i.NewWindow; (* asm-Datas *)
rastPortPtr : g.RastPortPtr;
j : INTEGER; (* Zähler *)
PROCEDURE QuickNDirty{"Start"}; (* kleiner asm-Screenhack
von der Disk MACRO-PD-SOFT # 9 *)
PROCEDURE Clear; (* clear Text im Window *)
BEGIN
g.SetAPen(rastPortPtr,0);
g.RectFill(rastPortPtr,2,11,410,105);
END Clear;
PROCEDURE ProcessIDCMP;
VAR
imPtr : i.IntuiMessagePtr;
class : LONGSET;
BEGIN
LOOP
e.WaitPort(wPtr.userPort);
imPtr := e.GetMsg(wPtr.userPort);
class:=imPtr.class;
e.ReplyMsg(imPtr);
IF i.newSize IN class THEN Clear;
(* Text neu zeichnen, könnte gelöscht sein *)
i.PrintIText(rastPortPtr,s.ADR(text),0,0);
d.Delay(10);
i.RefreshWindowFrame(wPtr) END;
IF j = 1 THEN j := 0 ELSE (* make shure window doesn't quit *)
IF i.closeWindow IN class THEN EXIT END;
END;
END;
END ProcessIDCMP;
BEGIN (* main *)
wPtr := NIL; j := 0;
wPtr := i.OpenWindow(nw); (* asm-Fenster öffnen *)
r.Assert(wPtr#NIL,"Sorry, Fenster geht nicht auf!");
(* Kontrolle, ob Fenster geöffnet wurde *)
(* h w xo yo *)
i.SetPointer(wPtr,s.ADR(BP),15,14, 0, 0);
(* ^^^^^- diese Werte müssen
stimmen, sonst geht die Grafik
'kaputt'! *)
rastPortPtr := wPtr.rPort;
(* Zeiger auf den RastPort besorgen *)
i.PrintIText(rastPortPtr,s.ADR(text),0,0); (* C-Text *)
(* Text ins Fenster schreiben *)
ProcessIDCMP; (* Warten auf Close-Gadget *)
(* hier 'hackt's' *)
i.SetWindowTitles(wPtr,s.ADR(" Don't worry, be happy! "),NIL);
j := 1;
QuickNDirty;
d.Delay(15);
Clear;
(* ein 2. Text *)
i.PrintIText(rastPortPtr,s.ADR(text2),0,0);
d.Delay(10);
i.RefreshWindowFrame(wPtr);
ProcessIDCMP; (* Warten auf Close-Gadget *)
i.ClearPointer(wPtr);
i.CloseWindow(wPtr);
wPtr := NIL;
CLOSE
IF wPtr # NIL THEN i.CloseWindow(wPtr) END;
END OberonPointer.